package com.cq.hd.order.service;

import com.cq.hd.common.pagination.Page;
import com.cq.hd.order.api.dto.*;
import com.cq.hd.order.api.vo.*;
import com.cq.hd.order.po.TbGroupBuyOrderItemPo;
import com.cq.hd.order.po.TbGroupBuyOrderPo;

import java.util.List;

public interface TbGroupBuyOrderService {

    TbGroupBuyOrderPo getById(Long groupBuyOrderId);

    // 开团
    void createGroupBuyOrder(CreateGroupBuyOrderDto createGroupBuyOrderDto);

    // 0元开团
    Long createZeroGroupBuyOrder(CreateZeroGroupBuyOrderDto createZeroGroupBuyOrderDto);

    // 参团
    void joinGroup(Long groupBuyOrderId, CreateGroupBuyOrderDto createGroupBuyOrderDto);

    // 取消
    void cancel(Long orderId);

    // 支付成功
    void updateGroupAfterPayment(Long orderId);

    // 拼团详情
    AppGroupBuyOrderDetailVo getAppGroupBuyOrderDetail(AppGroupBuyOrderDetailQueryDto appGroupBuyOrderDetailQueryDto);

    // 待成团订单列表（可直接参团）
    List<PendingGroupOrderVo> listPendingGroupBuyOrders(Long activeId, Long userId);

    // 查询拼团成员
    List<GroupBuyMemberVo> listGroupMembers(GroupMembersQueryDto groupMembersQueryDto);

    // 根据订单id查询拼团订单信息
    List<GroupBuyOrderDetailVo> listDetailByOrderIds(List<Long> orderIds);

    List<GroupBuyOrderNumStatVo> statisticsGroupOrderNumByActiveIds(List<Long> activeIds);

    // 分页
    Page<GroupBuyOrderPageVo> page(GroupBuyOrderPageDto groupBuyOrderPageDto);

    TbGroupBuyOrderItemPo getGroupBuyOrderItemByOrderId(Long orderId);

    // 扫描到期的拼团订单
    void scanExpiredGroupBuyOrders();

}
